#ifndef FACULTY_H
#define FACULTY_H

#include "Observer.h"
#include "University.h"


//Faculty_t implements Factory,Subject,Observer Design Patterns 
class Faculty_t : public Subject, public Observer{

public:
	int price;

	Faculty_t(University_t* pUV);

	virtual void	Update(Subject* changedSbj);

	virtual Student_t* createStudent() = 0;

protected:
	University_t* m_pUV;

	void destroyStudent(Student_t* student);

	void destroyAllStudents();

	virtual ~Faculty_t();
};


class FacultyOfHumanities : public Faculty_t {

public:
	FacultyOfHumanities(University_t* m_pUV);

	virtual Student_t* createStudent() ;
};


class ExactSciencesFaculty : public Faculty_t {

public:
	ExactSciencesFaculty(University_t* m_pUV);

	virtual Student_t* createStudent() ;
};


#endif